{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nJLWIoS9JLfL/7xmBLlYN1N4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f06ba94de10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import theano\n",
    "import theano.tensor as T\n",
    "import theano.tensor.nnet as NN\n",
    "#three most useful packages in theano\n",
    "\n",
    "import numpy as NP\n",
    "import numpy.random as RNG\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Define input datas\n",
    "X_data = NP.arange(100, step=2.5)\n",
    "y_data = X_data + 20 * NP.sin(X_data/10)\n",
    "# Plot input datas\n",
    "plt.scatter(X_data, y_data)\n",
    "\n",
    "X_test = NP.random.rand(200)*120"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "COMPILE DONE\n"
     ]
    }
   ],
   "source": [
    "lr=1e-4 #learning rate\n",
    "\n",
    "#define inputs\n",
    "x=T.vector()\n",
    "y=T.vector()\n",
    "\n",
    "#define parameters\n",
    "W=theano.shared(RNG.random())\n",
    "b=theano.shared(NP.array(0.0))\n",
    "params = [W,b]\n",
    "\n",
    "#build the equation \n",
    "y_hat = x*W+b\n",
    "\n",
    "#define the loss\n",
    "loss = T.mean(0.5*(y_hat-y)**2)\n",
    "\n",
    "#calculate the gradient \n",
    "grads = theano.grad(loss, params)\n",
    "\n",
    "#gradient descent \n",
    "param_update = []\n",
    "for p,g in zip(params, grads):\n",
    "    param_update.append((p, p-lr*g))\n",
    "    \n",
    "#compile the theano function\n",
    "train_func = theano.function([x, y], [loss, y_hat], updates=param_update, allow_input_downcast=True)\n",
    "print 'COMPILE DONE'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f0699dcebd0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlwAAAJPCAYAAACpXgqFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4VdW9xvHvSiQSRQUqFQQZrBdxugVFRS0VAhkwEoiB\nOAEJtaIVUCFFwFbEVkBQLE5UccAQRGQQRIiehCEJ2ArYFlBBxCFapGCwQiEmJSTr/nEiFxEl5Azr\nDO/neXianJxz9kuK5GWvtX/bWGsRERERkcCJcR1AREREJNKpcImIiIgEmAqXiIiISICpcImIiIgE\nmAqXiIiISICpcImIiIgEWJ0KlzHmBWPMLmPMu4c99rAxZosxZqMx5lVjzGmHfW2sMWabMeYDY0xS\nIIKLiIiIhIu6nuGaCaQc8VgBcIG19ufAh8BYAGPM+cD1wPm1r5lujNGZNBEREYladSpC1trVwNdH\nPFZora2p/XQt0Kr24z7Ay9baKmttKfARcJl/4oqIiIiEH3+defoVkF/78ZnA9sO+th1o6afjiIiI\niIQdnwuXMeZ3wAFr7ZwfeZruHyQiIiJR6wRfXmyMyQauAXoc9vAXwFmHfd6q9rEjX6sSJiIiImHD\nWmvq+9p6n+EyxqQAo4A+1trKw760BLjBGBNnjGkH/A+w7mjvYa3Vr3r+uv/++51nCOdf+v7p+6fv\nXXj+0vdP3z9Xv3xVpzNcxpiXgauB040x/wTux3tVYhxQaIwB+Ku19g5r7WZjzDxgM3AQuMP6I6mI\niIhImKpT4bLW3niUh1/4kedPBCbWN5SIiIhIJNF8rDDVrVs31xHCmr5/vtH3r/70vfONvn++0ffP\nHeNqtc8Yo5VGERERCQvGGKwPm+Z9ukpRRERE3KndQy1+FogTQipcIiIiYUyrRf4VqBKrPVwiIiIi\nAabCJSIiIhJgKlwiIiIiAabCJSIiIn534YUXUlJS4rfnhTuNhRAREQlTtaMKXMfwm/Hjx/Pxxx+T\nl5fnLMMPfU99HQuhM1wiIiIiAaYzXCIiImEqlM9wtW3blueff57Vq1ezefNm4uPjWbRoEa1btyY3\nN5dLLrnkO8+rqqqiT58+WGs58cQTOeecc/jHP/4R9Nw6wyUiIiJh4/B5Vq+//jo33ngje/fuJS0t\njWHDhn3necYYUlJSuPfee7nhhhvYt2+fk7IVSCpcIiIiEcwY//yq//ENXbt2JSUlBWMMAwYMYOPG\njUd9rrU2ZM/Y+UqT5kVERCJYKPSXM84449DHJ510EpWVldTU1BATEz3nfaLndyoiIiIhLZLvDanC\nJSIiIgFzPEuEzZs3p7S0NCKXFVW4REREJCC+3RB/5JmrHzqT1b9/fwB+8pOf0Llz54DnCyaNhRAR\nEQlToTwWIlxpLISIiIhImFLhEhEREQkwFS4RERGRAFPhEhEREQkwFS4RERGRAFPhEhEREQkwFS4R\nERGRAFPhEhEREQkwFS4REREJSb/5zW948MEHA/LeMTExfPLJJwF576PRpHkREZEwFeqT5tu2bcsL\nL7xAQkKC6yjfExMTw0cffcTZZ5/9ncc1aV5ERETCyo8VwoMHDwY5jVsqXCIiIuJ3AwcO5PPPP6d3\n796ccsopPPzww8TExPDCCy/Qpk0bevbsCXhvWN2iRQsaN27M1VdfzebNmw+9R3Z2Nvfddx8ARUVF\ntGrVikcffZQzzjiDM888kxdffPHQc//73//y29/+ljZt2tC8eXN+85vfUFlZeejrDz/8MGeeeSat\nWrXihRdeCM434TAqXCIiIuJ3eXl5tG7dmqVLl7Jv3z4yMzMBKCkp4YMPPsDj8QCQmprKRx99RFlZ\nGRdffDE333zzofcwxmDM/6/i7dq1i//85z/s2LGD559/nqFDh7J3714AxowZw0cffcTGjRv56KOP\n+OKLL/jDH/4AwJtvvsnUqVNZvnw5H374IcuXLw/Wt+H/fy/awyUiIhKe6rKHyzxQ721H32HvP/6f\n2e3ateP5558nISGB0tJSzj77bD755BPatm171Ofv2bOHpk2bsnfvXk455RQGDx5Mq1at+OMf/0hR\nURHXXHMN+/fvJybGe77ojDPO4PXXX+fSSy/llFNOYdOmTYf2ZP31r3/l5ptv5pNPPuFXv/oVzZs3\nZ+LEiQBs27aNc889N6h7uE6o7wtFREQk9NWnKAXSWWeddejjmpoa7r33XhYsWEBZWdmhIrV7925O\nOeWU7732Jz/5yaHnAJx00kns37+fsrIyvvnmGy655JJDX7PWUlNTA8C//vUvLr300kNfa926td9/\nX8eiwiUiIiIBcfhy4NEee+mll1iyZAkrVqygTZs2h85wHX6G6WjvcaTTTz+d+Ph4Nm/eTIsWLb73\n9RYtWvD5558f+vzwj4NFe7hEREQkIM444ww+/vjjH/z6/v37OfHEE2natCnl5eXce++93/m6tbZO\nYy9iYmK49dZbufvuuykrKwPgiy++oKCgAIDMzExefPFFtmzZwjfffMMDDzzgw++qflS4REREJCDG\njh3Lgw8+SNOmTVm4cOH3zlYNGjSINm3a0LJlSy688EKuuOKK7zznyE3zP3a2a/LkyZxzzjl06dKF\n0047jcTERD788EMAUlJSuPvuu0lISKB9+/b06NGjTmfO/Emb5kVERMJUqA8+DUcafCoiIiISplS4\nRERERAJMhUtEREQkwFS4RERERAJMhUtEREQkwFS4RERERAJMk+ZFRETCWLDnSUn9qHCJiIiEKc3g\nCh9aUhQREREJMBUuERERkQBT4RIREREJMBUuERERkQBT4RIREREJMBUuERERkQBT4RIREREJMBUu\nERERkQBT4RIREREJMBUuERERkQBT4RIREREJMBUuERERkQBT4RIREREJMBUuERERkQBT4RIREREJ\nMBUuERERkQBT4RIREREJMBUuERERkQBT4RIREREJMBUuERGRMPbn9X9m21fbXMeQY1DhEhERCVNP\nrXuKqX+dyslxJ7uOIsdwgusAIiIicvxyN+Qy+a3JlAwu4cxTznQdR45BhUtERCTMLNi8gLErxrIy\nayVtG7d1HUfqQIVLREQkjORvy2do/lAKBhTQ4fQOruNIHWkPl4iIRAyPx0NSUgZJSRl4PB6fnxdq\nikqLyF6czZIblvDz5j93HUeOg7HWujmwMdbVsUVEJPJ4PB7S07OoqJgMQHz8aBYtyiU5Oblezws1\na7evpffLvZnXfx7d2nZzHSfqGGOw1pr6vr5OZ7iMMS8YY3YZY9497LGmxphCY8yHxpgCY0zjw742\n1hizzRjzgTEmqb7hRERE6mrq1Bm1JSoL8BaqqVNn1Pt5oWTjzo2kzU3jxb4vqmyFqbouKc4EUo54\nbAxQaK1tD6yo/RxjzPnA9cD5ta+ZbozR0qWIiEg9fLD7A3q91IunrnmKa/7nGtdxpJ7qVISstauB\nr494OA3Irf04F+hb+3Ef4GVrbZW1thT4CLjM96giIhKt6rLnKidnCPHxo/H+SMolPn40OTlD6v28\nuh43kD79+lOS8pKY1GMS/c7vF/Tji//UeQ+XMaYt8Lq19qLaz7+21jap/dgA/7bWNjHGPAG8ba19\nqfZrzwFvWGsXHvF+2sMlIiLHdDx7rjwez6HlwZycIT+4L6suz3O912vHvh10ndmVnCtyuOPSO4Jy\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f06ba96e690>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print_flag=False #if you want details of trainning, just enable this flag\n",
    "fig = plt.figure(figsize=(10,10))\n",
    "plt.scatter(X_data, y_data)\n",
    "\n",
    "for i in xrange(50):\n",
    "    cost, n_out = train_func(X_data, y_data)\n",
    "    if i==0:\n",
    "        plt.plot(X_data, n_out)\n",
    "    if print_flag:\n",
    "        print 'loss={0:.4f}\\tW={1:.4f}\\tb={2:.4f}'.format(cost.tolist(), W.get_value().tolist(), b.get_value().tolist())\n",
    "\n",
    "plt.plot(X_data, n_out)\n",
    "plt.xlim(-20,120)\n",
    "plt.ylim(-20,120)\n",
    "plt.legend(['init', 'trained'])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
